package com.jxm.a08;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;

/**
 * @Author: jxm
 * @Description:
 * @Date: 2024-1-11 14:20
 * @Version: 1.0
 */
@Component
public class BeanSingleton {

    /**
     * 在Spring中，默认情况下，Bean对象的作用域是singleton（单例），也就是说，同一个容器中，同一个Bean的实例只会被创建一次。
     * 因此，当一个Bean的实例不再被其他对象所引用时，Spring容器并不会立即销毁它，而是将其放入一个对象池中，以备后续可能再次使用。\
     *
     * 如果Spring容器关闭，或者由于内存不足等原因，需要释放一些Bean实例，那么Spring容器会自动将这些未被引用的Bean实例销毁，以释放内存。
     *
     * 总的来说，Spring容器中的对象也是普通Java对象，会被JVM的垃圾回收器所管理，只要这些对象不再被其他对象所引用，就会被垃圾回收器回收。
     * Spring容器中的单例对象并不是一直存在的，而是可以被销毁和重用的
     *
     */

    private static final Logger log = LoggerFactory.getLogger(BeanForRequest.class);

    @PreDestroy
    public void destroy() {
        log.debug("BeanSingleton destroy");
    }
}
